home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 4
/
Aminet 4 - November 1994.iso
/
aminet
/
util
/
misc
/
setpri17.lha
/
SetPri.c
< prev
next >
Wrap
C/C++ Source or Header
|
1994-07-09
|
3KB
|
138 lines
#define __USE_SYSBASE 1
#include <exec/types.h>
#include <exec/nodes.h>
#include <exec/tasks.h>
#include <exec/execbase.h>
#include <proto/exec.h>
#include <dos/dosextens.h>
#include <dos.h>
#include <proto/dos.h>
#include <string.h>
struct Process *FindProc(char *name);
#define FORLIST(list,p) for ((p) = (void *)(list)->lh_Head; \
((struct Node *)(p))->ln_Succ; \
(p) = (void *)((struct Node *)(p))->ln_Succ)
const char * VERSTAG = "$VER: SetPri 1.7 (9.7.94) © Richard Waspe 1994 ";
BOOL IsATask;
BYTE orgpri;
int main (void)
{
LONG pri=0, oldpri=0;
struct Task *TaskPtr = NULL;
LONG Quiet = 0;
struct RDArgs *rda;
LONG vec[3];
char * TaskName = NULL;
vec[0] = 0;
vec[1] = 0;
vec[2] = 0;
if (rda = ReadArgs("NAME/A,PRIORITY/A/N,Q=QUIET/S", vec, NULL) )
{
TaskName = (char *)(vec[0]);
pri = *(LONG *)(vec[1]);
Quiet = vec[2];
if (pri <-50 || pri >19)
{
if (!Quiet)
PutStr("Requested priority out of range\n");
FreeArgs(rda);
return 10;
}
Forbid();
TaskPtr = (struct Task *)(FindProc(TaskName));
if (TaskPtr == NULL)
{
Permit();
if (!Quiet)
Printf("%s not found\n", TaskName);
FreeArgs(rda);
return 20;
}
else
{
if (orgpri != pri)
oldpri = SetTaskPri(TaskPtr, pri);
Permit();
if (!Quiet)
{
if (IsATask)
Printf("Task ");
else
Printf("Process ");
if (orgpri == pri)
Printf("%s was already at requested priority\n", TaskName);
else
Printf("%s priority changed from %ld to %ld\n", TaskName, oldpri, pri);
}
FreeArgs(rda);
return 0;
}
}
else
PrintFault(IoErr(), "ReadArgs() error");
return 5;
}
struct Process *FindProc(char *name)
{
struct Process *proc;
struct List *tasklist[3];
struct List **plist;
int len = strlen(name);
tasklist[0] = &SysBase->TaskWait;
tasklist[1] = &SysBase->TaskReady;
tasklist[2] = NULL;
Disable();
for (plist = tasklist; *plist != NULL; plist++)
{
FORLIST(*plist, proc)
{
if (proc->pr_Task.tc_Node.ln_Type != NT_PROCESS || proc->pr_CLI == 0)
{
if (stricmp(proc->pr_Task.tc_Node.ln_Name, name) == 0)
{
Enable();
IsATask = (proc->pr_Task.tc_Node.ln_Type != NT_PROCESS);
orgpri = proc->pr_Task.tc_Node.ln_Pri;
return (proc);
}
}
else
{
struct CommandLineInterface *cli = (void *)BADDR(proc->pr_CLI);
unsigned char *cmdname = (void *)BADDR(cli->cli_CommandName);
if (cmdname)
{
if (len <= *cmdname && strnicmp(cmdname + *cmdname + 1 - len,
name, len) == 0)
{
Enable();
orgpri = proc->pr_Task.tc_Node.ln_Pri;
IsATask = FALSE;
return (proc);
}
}
}
}
}
Enable();
return (NULL);
}